#include<bits/stdc++.h>
using namespace std;
const int MAX = 400005;
char a[MAX], b[MAX];
const double PI = acos(-1.0);

int len, res[MAX];

complex<double> A[MAX], B[MAX], omg[MAX], inv[MAX];

void init(){
	for(int i=0;i<len;i++){
		omg[i] = complex<double>(cos(2 * PI * i / len), sin(2 * PI * i / len));
		inv[i] = conj(omg[i]);
		
		A[i].real(0);
		B[i].real(0);
		A[i].imag(0);
		B[i].imag(0);
	}
}

void fft(complex<double> *a, complex<double> *omg){
	int lim = 0;
	while((1 << lim) < len){
		lim++;
	}
	for(int i=0; i<len; i++){
		int t = 0;
		for(int j=0; j<lim; j++){
			if((i >> j) & 1){
				t |= (1 << (lim - j - 1));
			}
		}
		if(i < t){
			swap(a[i], a[t]);
		}
	}
	for(int l=2; l<=len; l<<=1){
		int m = l >> 1;
		for(complex<double> *p = a; p != a + len; p += l){
			for(int i=0; i<m; i++){
				complex<double> t = omg[len / l * i] * p[i + m];
				p[i + m] = p[i] - t;
				p[i] += t;
			}
		}
	}
}

int main(){
	int t;
	scanf("%d", &t);
	while(t--){
		scanf("%s %s", a, b);
		int lena = strlen(a), lenb = strlen(b);
		for(len = 1; len < lena + lenb; len <<= 1);
		
		init();
		
		for(int i=0;i<lena;i++){
			A[i].real(a[lena - 1 - i] - '0');
		}
		for(int i=0;i<lenb;i++){
			B[i].real(b[lenb - 1 - i] - '0');
		}
		fft(A, omg);
		fft(B, omg);
		for(int i=0;i<len;i++){
			A[i] *= B[i];
		}
		fft(A, inv);
		
		memset(res, 0, sizeof res);
		
		for(int i=0; i<len; i++){
			res[i] += floor(A[i].real() / len + 0.5);
			res[i + 1] += res[i] / 10;
			res[i] %= 10;
		}
		for(int i = res[lena + lenb - 1] ? lena+lenb-1 : lena+lenb-2; i>=0; i--){
			printf("%c", res[i] + '0');
		}
		printf("\n");
	}
	return 0;
}
